package com.hunter.studentsystem.Student.service;

import com.hunter.studentsystem.Student.Student;
import com.hunter.studentsystem.Student.dao.StudentMapper;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;
import java.util.List;

@Service
public class StudentServiceImpl implements StudentService {
    @Resource // 将studentMapper的字段自动注入
    private StudentMapper studentMapper;

    /**
     * 获取学生信息
     *
     * @return
     */
    @Override
    public List<Student> getStudents() {
        return studentMapper.selectList(null); // 调用了studentMapper的selectList方法来查询所有学生。
    }

    /**
     * 保存学生信息
     *
     * @param student
     */
    @Override
    public void saveStudent(Student student) {
        // 判断email
        Student select = studentMapper.selectByEmail(student.getEmail());
        if (select != null) {
            throw new IllegalStateException("email 已存在!");
        }
        // 保存
        studentMapper.insert(student);
    }

    /**
     * 删除学生信息
     *
     * @param studentId
     */
    @Override
    public void deleteStudentById(Long studentId) {
        // 直接使用 studentId 查询数据库
        Student select = studentMapper.selectById(studentId);
        if (select == null) {
            throw new IllegalStateException("学生id不存在！");
        }
        studentMapper.deleteById(studentId);  // 使用 studentId 删除记录
    }

    /**
     * 更新学生信息
     *
     * @param studentId
     * @param name
     * @param email
     */
    @Override
    public void updateStudentById(Long studentId, String name, String email) {
        // 先判断id，不存在抛异常
        Student select = studentMapper.selectById(studentId); // select是一个Student对象
        if (select == null) {
            throw new IllegalStateException("id 不存在！");
        }
        // 名字不为空且有变化
        if (name != null && !name.isEmpty() && !name.equals(select.getName())) {
            select.setName(name);
        }
        // 邮箱不为空且有变化
        if (email != null && !email.isEmpty() && !email.equals(select.getEmail())) {
            select.setEmail(email);
        }
        studentMapper.updateById(select); // 用更新之后的Student对象，根据select的id更新找到相应的Student对象，并更新信息
    }


}
